package com.zenithmind.classroom.pojo.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 课程查询DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "课程查询DTO")
public class CourseQueryDTO {

    /**
     * 当前页
     */
    @Schema(description = "当前页")
    private Long current = 1L;

    /**
     * 页大小
     */
    @Schema(description = "页大小")
    private Long size = 10L;

    /**
     * 关键词
     */
    @Schema(description = "关键词")
    private String keyword;

    /**
     * 课程分类ID
     */
    @Schema(description = "课程分类ID")
    private String categoryId;

    /**
     * 讲师ID
     */
    @Schema(description = "讲师ID")
    private String instructorId;

    /**
     * 课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）
     */
    @Schema(description = "课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）")
    private Integer status;

    /**
     * 课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）
     */
    @Schema(description = "课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）")
    private Integer difficulty;

    /**
     * 课程类型（1:录播课程, 2:直播课程, 3:混合课程）
     */
    @Schema(description = "课程类型（1:录播课程, 2:直播课程, 3:混合课程）")
    private Integer type;

    /**
     * 是否免费（0-付费，1-免费）
     */
    @Schema(description = "是否免费（0-付费，1-免费）")
    private Integer isFree;

    /**
     * 是否推荐（0-否，1-是）
     */
    @Schema(description = "是否推荐（0-否，1-是）")
    private Integer isRecommend;

    /**
     * 是否热门（0-否，1-是）
     */
    @Schema(description = "是否热门（0-否，1-是）")
    private Integer isHot;

    /**
     * 是否新课程（0-否，1-是）
     */
    @Schema(description = "是否新课程（0-否，1-是）")
    private Integer isNew;

    /**
     * 课程标签
     */
    @Schema(description = "课程标签")
    private List<String> tags;

    /**
     * 最低价格
     */
    @Schema(description = "最低价格")
    private Double minPrice;

    /**
     * 最高价格
     */
    @Schema(description = "最高价格")
    private Double maxPrice;

    /**
     * 最低评分
     */
    @Schema(description = "最低评分")
    private Double minRating;

    /**
     * 最高评分
     */
    @Schema(description = "最高评分")
    private Double maxRating;

    /**
     * 最少学习人数
     */
    @Schema(description = "最少学习人数")
    private Long minStudentCount;

    /**
     * 最多学习人数
     */
    @Schema(description = "最多学习人数")
    private Long maxStudentCount;

    /**
     * 创建开始时间
     */
    @Schema(description = "创建开始时间")
    private LocalDateTime createStartTime;

    /**
     * 创建结束时间
     */
    @Schema(description = "创建结束时间")
    private LocalDateTime createEndTime;

    /**
     * 发布开始时间
     */
    @Schema(description = "发布开始时间")
    private LocalDateTime publishStartTime;

    /**
     * 发布结束时间
     */
    @Schema(description = "发布结束时间")
    private LocalDateTime publishEndTime;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段")
    private String sortField;

    /**
     * 排序方向（asc-升序，desc-降序）
     */
    @Schema(description = "排序方向（asc-升序，desc-降序）")
    private String sortOrder;

    /**
     * 是否包含已删除
     */
    @Schema(description = "是否包含已删除")
    private Boolean includeDeleted = false;
}
